package com.andreiolar.abms.client.view.impl; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import com.andreiolar.abms.client.constants.AdminMenuConstants; import com.andreiolar.abms.client.constants.DialogBoxConstants; import com.andreiolar.abms.client.constants.RegistrationFormConstants; import com.andreiolar.abms.client.constants.UserMenuConstants; import com.andreiolar.abms.client.place.LoginPlace; import com.andreiolar.abms.client.rpc.DBChangeUsername; import com.andreiolar.abms.client.rpc.DBChangeUsernameAsync; import com.andreiolar.abms.client.rpc.DBCheckIfActiveVotingSession; import com.andreiolar.abms.client.rpc.DBCheckIfActiveVotingSessionAsync; import com.andreiolar.abms.client.rpc.DBCheckIfVoteIDAvailable; import com.andreiolar.abms.client.rpc.DBCheckIfVoteIDAvailableAsync; import com.andreiolar.abms.client.rpc.DBDeactivateVote; import com.andreiolar.abms.client.rpc.DBDeactivateVoteAsync; import com.andreiolar.abms.client.rpc.DBGetActiveVoteID; import com.andreiolar.abms.client.rpc.DBGetActiveVoteIDAsync; import com.andreiolar.abms.client.rpc.DBGetComplaintInfo; import com.andreiolar.abms.client.rpc.DBGetComplaintInfoAsync; import com.andreiolar.abms.client.rpc.DBGetSelfReadings; import com.andreiolar.abms.client.rpc.DBGetSelfReadingsAsync; import com.andreiolar.abms.client.rpc.DBGetUserInfo; import com.andreiolar.abms.client.rpc.DBGetUserInfoAsync; import com.andreiolar.abms.client.rpc.DBInsertEmail; import com.andreiolar.abms.client.rpc.DBInsertEmailAsync; import com.andreiolar.abms.client.rpc.DBUpdateUser; import com.andreiolar.abms.client.rpc.DBUpdateUserAsync; import com.andreiolar.abms.client.rpc.DateGetter; import com.andreiolar.abms.client.rpc.DateGetterAsync; import com.andreiolar.abms.client.utils.DialogBoxCreator; import com.andreiolar.abms.client.utils.WidgetUtils; import com.andreiolar.abms.client.view.AdminView; import com.andreiolar.abms.client.widgets.AboutWidget; import com.andreiolar.abms.client.widgets.CustomTexBox; import com.andreiolar.abms.client.widgets.InstInfoWidget; import com.andreiolar.abms.client.widgets.VotingResultsWidget; import com.andreiolar.abms.shared.ComplaintInfo; import com.andreiolar.abms.shared.EmptyStringValidator; import com.andreiolar.abms.shared.IDSeriesValidator; import com.andreiolar.abms.shared.MobileNumberValidator; import com.andreiolar.abms.shared.NameValidator; import com.andreiolar.abms.shared.SelfReading; import com.andreiolar.abms.shared.UserInfo; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.FontWeight; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.SimplePager; import com.google.gwt.user.cellview.client.SimplePager.TextLocation; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DecoratorPanel; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.datepicker.client.DateBox; import com.google.gwt.view.client.ListDataProvider; public class AdminViewImpl extends Composite implements AdminView { private String username; private static UserInfo userInfo; private ScrollPanel scroller = new ScrollPanel(); private String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; private String currentYear; private static Presenter presenter; private static TextBox activeVoteID = new TextBox(); public AdminViewImpl() { String sessionId = Cookies.getCookie("sid"); if (sessionId != null) { Widget mainMenu = createMenu(); initWidget(mainMenu); } else { presenter.goTo(new LoginPlace("")); } } private void setUsername() { String url = Window.Location.getHref(); String place = url.substring(url.indexOf("#") + 1, url.length()); this.username = place.substring(place.indexOf(":") + 1, place.length()); } private Widget createMenu() { setUsername(); setUserInfo(username); setCurrentYear(); String sessionId = Cookies.getCookie("sid"); if (!sessionId.equals(username)) { presenter.goTo(new LoginPlace("")); } VerticalPanel panel = new VerticalPanel(); HTML title = new HTML("<p style=\"font-size:35px\"><b><i>Apartment Building Management System</i></b></p>"); Widget menu = createMenuBar(); HTML footer = new HTML("<p><i>Copyright © 2016 Andrei Olar</i></p>"); Widget defaultWidget = WidgetUtils.createDefaultPresentationWidget(username); scroller.add(defaultWidget); DecoratorPanel decPanel = new DecoratorPanel(); decPanel.setWidget(scroller); scroller.setAlwaysShowScrollBars(true); panel.add(title); panel.add(menu); panel.add(decPanel); panel.add(footer); panel.setCellHorizontalAlignment(footer, HasHorizontalAlignment.ALIGN_CENTER); scroller.setStyleName("scroll-panel"); decPanel.setStyleName("dec-panel"); return panel; } private Widget createMenuBar() { // Create the menu bar MenuBar menu = new MenuBar(); menu.setAutoOpen(true); menu.setWidth("100%"); menu.setAnimationEnabled(true); menu.setStyleName("navigation-menu"); // Create the complaints menu MenuBar complaintsMenu = new MenuBar(true); complaintsMenu.setAnimationEnabled(true); menu.addItem(new MenuItem(AdminMenuConstants.MENU_ITEM_COMPLAINTS, complaintsMenu)); complaintsMenu.addItem(AdminMenuConstants.MENU_ITEM_VIEW_COMPLAINTS, new Command() { @Override public void execute() { scroller.clear(); Widget complaintsViewerWidget = createComplaintsViewerWidget(); scroller.add(complaintsViewerWidget); } }); MenuBar administrationMenu = new MenuBar(true); administrationMenu.setAnimationEnabled(true); menu.addItem(new MenuItem(AdminMenuConstants.MENU_ITEM_ADMINISTRATION, administrationMenu)); administrationMenu.addItem(AdminMenuConstants.MENU_ITEM_CONTACT_VIEW, new Command() { @Override public void execute() { scroller.clear(); // Widget contactViewWidget = new ContactViewWidget(userInfo); // scroller.add(contactViewWidget); } }); administrationMenu.addItem(AdminMenuConstants.MENU_ITEM_ADD_EMAIL, new Command() { @Override public void execute() { scroller.clear(); Widget emailWidget = createEmailWidget(); emailWidget.getElement().getStyle().setMarginTop(50.0, Unit.PX); scroller.add(emailWidget); } }); MenuBar upkeepMenu = new MenuBar(true); administrationMenu.addSeparator(); upkeepMenu.addItem(AdminMenuConstants.MENU_ITEM_UPLOAD_UPKEEP, new Command() { @Override public void execute() { scroller.clear(); Widget upkeepUploadWidget = createUploadFormWidget(); scroller.add(upkeepUploadWidget); } }); upkeepMenu.addItem(AdminMenuConstants.MENU_ITEM_VIEW_READINGS, new Command() { @Override public void execute() { scroller.clear(); Widget viewReadingsWidget = createReadingsWidget(); scroller.add(viewReadingsWidget); } }); administrationMenu.addItem(AdminMenuConstants.MENU_ITEM_UPKEEP, upkeepMenu); MenuBar votingMenu = new MenuBar(true); votingMenu.setAnimationEnabled(true); menu.addItem(new MenuItem(AdminMenuConstants.MENU_ITEM_VOTING, votingMenu)); votingMenu.addItem(AdminMenuConstants.MENU_ITEM_CREATE_VOTE, new Command() { @Override public void execute() { scroller.clear(); Widget voteCreatorWidget = createVoteCreatorWidget(); scroller.add(voteCreatorWidget); } }); votingMenu.addItem(AdminMenuConstants.MENU_ITEM_VIEW_RESULTS, new Command() { @Override public void execute() { scroller.clear(); Widget viewResultsWidget = new VotingResultsWidget(userInfo, true); scroller.add(viewResultsWidget); } }); MenuBar helpMenu = new MenuBar(true); helpMenu.setAnimationEnabled(true); menu.addItem(new MenuItem(AdminMenuConstants.MENU_ITEM_HELP, helpMenu)); helpMenu.addItem(AdminMenuConstants.MENU_ITEM_ABOUT, new Command() { @Override public void execute() { scroller.clear(); Widget aboutWidget = new AboutWidget(); scroller.add(aboutWidget); } }); helpMenu.addItem(AdminMenuConstants.MENU_ITEM_INST_INFO, new Command() { @Override public void execute() { scroller.clear(); Widget instInfoWifged = new InstInfoWidget(); scroller.add(instInfoWifged); } }); MenuBar optionsMenu = new MenuBar(true); optionsMenu.setAnimationEnabled(true); menu.addItem(new MenuItem(AdminMenuConstants.MENU_ITEM_OPTIONS, optionsMenu)); optionsMenu.addItem(AdminMenuConstants.MENU_ITEM_UPDATE_USER_INFO, new Command() { @Override public void execute() { scroller.clear(); Widget updateUserInfoWidget = createUpdateUserInfoWidget(); scroller.add(updateUserInfoWidget); } }); optionsMenu.addSeparator(); optionsMenu.addItem(AdminMenuConstants.LOGOUT, new Command() { @Override public void execute() { Window.Location.replace("http://127.0.0.1:8888/Abms.html"); } }); return menu; } protected Widget createUpdateUserInfoWidget() { final VerticalPanel panel = new VerticalPanel(); panel.setSpacing(10); final Label usernameLabel = new Label("Username");; usernameLabel.getElement().getStyle().setFontSize(24.0, Unit.PX); usernameLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD); // Username Label usernameL = new Label(); usernameL.setText("Username: "); final TextBox usernameBox = new TextBox(); usernameBox.setStyleName("fixed-input"); // Grid for username final Grid usernameGrid = new Grid(1, 2); // Get button final Button getPersonalDataButton = new Button(); getPersonalDataButton.setText("Retrieve Data"); getPersonalDataButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String username = usernameBox.getText(); boolean usernameSet = true; String message = ""; if (username == null || username.trim().equals("")) { message += "<p>Please enter a username!</p>"; usernameSet = false; } if (usernameSet) { DBGetUserInfoAsync rpcService = (DBGetUserInfoAsync) GWT.create(DBGetUserInfo.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetUserInfoImpl"; target.setServiceEntryPoint(moduleRelativeURL); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); rpcService.getUserInfo(username, new AsyncCallback<UserInfo>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILURE_GET_USER_INFO, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); panel.clear(); panel.add(usernameLabel); panel.add(usernameGrid); panel.add(getPersonalDataButton); } @Override public void onSuccess(final UserInfo userInfo) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); panel.clear(); panel.add(usernameLabel); TextBox usernameB = (TextBox) usernameGrid.getWidget(0, 1); usernameB.setText(userInfo.getUsername()); panel.add(usernameGrid); panel.add(getPersonalDataButton); // Personal Information Label final Label personalInformationLabel = new Label("Personal Information");; personalInformationLabel.getElement().getStyle().setFontSize(24.0, Unit.PX); personalInformationLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD); // First Name Label firstName = new Label("First Name"); final CustomTexBox firstNameBox = new CustomTexBox(); firstNameBox.setMaxLength(30); firstNameBox.setText(userInfo.getFirstName()); firstNameBox.addValidator(new NameValidator()); firstNameBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { firstNameBox.validate(); } }); Label firstNameObs = new Label("(Max 30 characters a-z and a-Z)"); // Last Name Label lastName = new Label("Last Name"); final CustomTexBox lastNameBox = new CustomTexBox(); lastNameBox.setMaxLength(30); lastNameBox.setText(userInfo.getLastName()); lastNameBox.addValidator(new NameValidator()); lastNameBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { lastNameBox.validate(); } }); Label lastNameObs = new Label("(Max 30 characters a-z and a-Z)"); // Date of Birth Label dateOfBirth = new Label("Date Of Birth"); // Configure DateBox DateTimeFormat dateFormat = DateTimeFormat.getLongDateFormat(); final DateBox dateBox = new DateBox(); dateBox.setValue(userInfo.getDateOfBirth()); dateBox.setFormat(new DateBox.DefaultFormat(dateFormat)); dateBox.getDatePicker().setYearArrowsVisible(true); dateBox.setEnabled(false); dateBox.setStyleName("fixed-input"); // E-Mail Address Label emailAddress = new Label("E-Mail Address"); final TextBox formEmailBox = new TextBox(); formEmailBox.setText(userInfo.getEmail()); formEmailBox.setStyleName("fixed-input"); // Mobile Number Label mobileNumber = new Label("Mobile Number"); final CustomTexBox mobileNumberBox = new CustomTexBox(); mobileNumberBox.setMaxLength(10); mobileNumberBox.setText(userInfo.getMobileNumber()); mobileNumberBox.addValidator(new MobileNumberValidator()); mobileNumberBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { mobileNumberBox.validate(); } }); Label mobileNumberObs = new Label("(10 digit number)"); // Address Label address = new Label("Address"); final TextArea textArea = new TextArea(); textArea.setText(userInfo.getAddress()); textArea.setVisibleLines(5); textArea.setWidth("200px"); Label addressObs = new Label("(From the current ID)"); // Country Label country = new Label("Country"); final TextBox countryBox = new TextBox(); countryBox.setText(userInfo.getCountry()); Label countryObs = new Label("(From the current ID)"); countryBox.setStyleName("fixed-input"); // City Label city = new Label("City"); final CustomTexBox cityBox = new CustomTexBox(); cityBox.addValidator(new EmptyStringValidator()); cityBox.setText(userInfo.getCity()); cityBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { cityBox.validate(); } }); Label cityObs = new Label("(From the current ID)"); // Personal ID Number Label personalNumber = new Label("Personal ID Number"); final CustomTexBox personalNumberBox = new CustomTexBox(); personalNumberBox.setMaxLength(13); personalNumberBox.setText(userInfo.getPersonalNumber()); personalNumberBox.setEnabled(false); Label personalNumberObs = new Label("(Cannot be changed)"); // ID Series Label seriesNumber = new Label("ID Series"); final CustomTexBox seriesNumberBox = new CustomTexBox(); seriesNumberBox.setMaxLength(8); seriesNumberBox.setText(userInfo.getIdSeries()); seriesNumberBox.addValidator(new IDSeriesValidator()); seriesNumberBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { seriesNumberBox.validate(); } }); Label seriesNumberObs = new Label("(From the current ID)"); // Create a Grid to hold the personal information form Grid registrationPanel = new Grid(10, 3); registrationPanel.setWidget(0, 0, firstName); registrationPanel.setWidget(0, 1, firstNameBox); registrationPanel.setWidget(0, 2, firstNameObs); registrationPanel.setWidget(1, 0, lastName); registrationPanel.setWidget(1, 1, lastNameBox); registrationPanel.setWidget(1, 2, lastNameObs); registrationPanel.setWidget(2, 0, dateOfBirth); registrationPanel.setWidget(2, 1, dateBox); registrationPanel.setWidget(3, 0, emailAddress); registrationPanel.setWidget(3, 1, formEmailBox); registrationPanel.setWidget(4, 0, mobileNumber); registrationPanel.setWidget(4, 1, mobileNumberBox); registrationPanel.setWidget(4, 2, mobileNumberObs); registrationPanel.setWidget(5, 0, address); registrationPanel.setWidget(5, 1, textArea); registrationPanel.setWidget(5, 2, addressObs); registrationPanel.setWidget(6, 0, city); registrationPanel.setWidget(6, 1, cityBox); registrationPanel.setWidget(6, 2, cityObs); registrationPanel.setWidget(7, 0, country); registrationPanel.setWidget(7, 1, countryBox); registrationPanel.setWidget(7, 2, countryObs); registrationPanel.setWidget(8, 0, personalNumber); registrationPanel.setWidget(8, 1, personalNumberBox); registrationPanel.setWidget(8, 2, personalNumberObs); registrationPanel.setWidget(9, 0, seriesNumber); registrationPanel.setWidget(9, 1, seriesNumberBox); registrationPanel.setWidget(9, 2, seriesNumberObs); // Buttons Button submitButton = new Button(); submitButton.setText("Submit"); submitButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String firstName = firstNameBox.getText(); String lastName = lastNameBox.getText(); String email = formEmailBox.getText(); String mobileNumber = mobileNumberBox.getText(); String address = textArea.getText(); String city = cityBox.getText(); String country = countryBox.getText(); String personalNumber = personalNumberBox.getText(); String idSeries = seriesNumberBox.getText(); if (!firstName.equals(userInfo.getFirstName()) || !lastName.equals(userInfo.getLastName()) || !email.equals(userInfo.getEmail()) || !mobileNumber.equals(userInfo.getMobileNumber()) || !address.equals(userInfo.getAddress()) || !city.equals(userInfo.getCity()) || !country.equals(userInfo.getCountry()) || !idSeries.equals(userInfo.getIdSeries())) { if (firstNameBox.validate() && lastNameBox.validate() && mobileNumberBox.validate() && cityBox.validate() && personalNumberBox.validate() && seriesNumberBox.validate()) { DBUpdateUserAsync rpc = (DBUpdateUserAsync) GWT.create(DBUpdateUser.class); ServiceDefTarget tar = (ServiceDefTarget) rpc; String moduleURL = GWT.getModuleBaseURL() + "DBUpdateUserImpl"; tar.setServiceEntryPoint(moduleURL); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); rpc.updateUser(firstName, lastName, email, mobileNumber, address, city, country, idSeries, personalNumber, new AsyncCallback<Boolean>() { @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( UserMenuConstants.SUCCESS_UPDATE_USER_TITLE, UserMenuConstants.SUCCESS_UPDATE_USER_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, true); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( UserMenuConstants.FAILED_UPDATE_USER_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(RegistrationFormConstants.INVALID_DATA_TITLE, RegistrationFormConstants.INVALID_DATA_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_TITLE, UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } }); Button resetButton = new Button(); resetButton.setText("Reset"); resetButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { firstNameBox.setText(userInfo.getFirstName()); firstNameBox.setErrorStyles(true); lastNameBox.setText(userInfo.getLastName()); lastNameBox.setErrorStyles(true); formEmailBox.setText(userInfo.getEmail()); dateBox.setValue(userInfo.getDateOfBirth()); mobileNumberBox.setText(userInfo.getMobileNumber()); mobileNumberBox.setErrorStyles(true); textArea.setText(userInfo.getAddress()); cityBox.setText(userInfo.getCity()); cityBox.setErrorStyles(true); countryBox.setText(userInfo.getCountry()); personalNumberBox.setText(userInfo.getPersonalNumber()); personalNumberBox.setErrorStyles(true); seriesNumberBox.setText(userInfo.getIdSeries()); seriesNumberBox.setErrorStyles(true); } }); // Create Grid to hold the buttons Grid buttonPanel = new Grid(1, 2); buttonPanel.setWidget(0, 0, submitButton); buttonPanel.setWidget(0, 1, resetButton); buttonPanel.setCellSpacing(20); // Create a change login information label final Label loginInformation = new Label("Login Information");; loginInformation.getElement().getStyle().setFontSize(24.0, Unit.PX); loginInformation.getElement().getStyle().setFontWeight(FontWeight.BOLD); // Username Label usernameL2 = new Label(); usernameL2.setText("Username: "); final TextBox usernameBox2 = new TextBox(); usernameBox2.setStyleName("fixed-input"); usernameBox2.setText(userInfo.getUsername()); // Grid for username final Grid usernameGrid2 = new Grid(1, 2); usernameGrid2.setWidget(0, 0, usernameL2); usernameGrid2.setWidget(0, 1, usernameBox2); Button loginSubmitButton = new Button(); loginSubmitButton.setText("Submit"); loginSubmitButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String originalUser = usernameBox.getText(); String user = usernameBox2.getText(); if (!user.equals(originalUser)) { if (user != null && !user.trim().equals("")) { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBChangeUsernameAsync rpc = (DBChangeUsernameAsync) GWT.create(DBChangeUsername.class); ServiceDefTarget tar = (ServiceDefTarget) rpc; String moduleURL = GWT.getModuleBaseURL() + "DBChangeUsernameImpl"; tar.setServiceEntryPoint(moduleURL); rpc.changeUsername(originalUser, user, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( AdminMenuConstants.DIALOG_BOX_SUCCESS_UPDATE_USERNAME_TITLE, AdminMenuConstants.DIALOG_BOX_SUCCESS_UPDATE_USERNAME_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, true); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox( UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_TITLE, AdminMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_USER_EMPTY_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_TITLE, UserMenuConstants.DIALOG_BOX_FAILED_SUBMIT_INFO_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } }); Button loginResetButton = new Button(); loginResetButton.setText("Reset"); loginResetButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { usernameBox2.setText(userInfo.getUsername()); } }); // Create Grid to hold the buttons Grid loginButtonPanel = new Grid(1, 2); loginButtonPanel.setWidget(0, 0, loginSubmitButton); loginButtonPanel.setWidget(0, 1, loginResetButton); loginButtonPanel.setCellSpacing(20); panel.add(personalInformationLabel); panel.add(registrationPanel); panel.add(buttonPanel); panel.add(loginInformation); panel.add(usernameGrid2); panel.add(loginButtonPanel); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILURE_USERNAME_NOT_SET, message, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } }); usernameGrid.setWidget(0, 0, usernameL); usernameGrid.setWidget(0, 1, usernameBox); panel.add(usernameLabel); panel.add(usernameGrid); panel.add(getPersonalDataButton); return panel; } protected Widget createEmailWidget() { FlexTable table = new FlexTable(); table.setCellSpacing(6); table.setWidth("300px"); FlexCellFormatter cellFormatter = table.getFlexCellFormatter(); // Add a title to the form table.setHTML(0, 0, AdminMenuConstants.FORM_NAME); cellFormatter.setColSpan(0, 0, 2); cellFormatter.setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER); // Email final CustomTexBox emailBox = new CustomTexBox(); emailBox.setMaxLength(50); // emailBox.addValidator(new EmailValidator()); emailBox.setStyleName("fixed-input"); emailBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { emailBox.validate(); } }); // Apartment Number final TextBox apartmentNumberBox = new TextBox(); apartmentNumberBox.setMaxLength(3); apartmentNumberBox.setStyleName("fixed-input"); // Add Button Button addButton = new Button(); addButton.setText("Add"); addButton.setWidth("100px"); addButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String email = emailBox.getText(); String apartmentNumber = apartmentNumberBox.getText(); boolean emailSet = true; boolean apartmentNumberSet = true; String message = ""; if (email == null || email.trim().equals("")) { message += "<p>Please enter an E-Mail address!</p>"; emailSet = false; } if (apartmentNumber == null || apartmentNumber.trim().equals("")) { message += "<p>Pleae enter the apartment number!</p>"; apartmentNumberSet = false; } if (emailSet && apartmentNumberSet) { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBInsertEmailAsync rpcService = (DBInsertEmailAsync) GWT.create(DBInsertEmail.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBInsertEmailImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.insertEmail(email, apartmentNumber, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILURE_ADD_EMAIL_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_SUCCESS_ADD_EMAIL_TITLE, AdminMenuConstants.DIALOG_BOX_SUCCESS_ADD_EMAIL_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); emailBox.setText(null); apartmentNumberBox.setText(null); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILURE_ADD_EMAIL_TITLE, message, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } }); table.setHTML(1, 0, AdminMenuConstants.E_MAIL); table.setWidget(1, 1, emailBox); table.setHTML(2, 0, AdminMenuConstants.APT_NUMBER); table.setWidget(2, 1, apartmentNumberBox); table.setWidget(3, 1, addButton); DecoratorPanel decPanel = new DecoratorPanel(); decPanel.setWidget(table); return decPanel; } protected Widget createVoteCreatorWidget() { getActiveVoteID(); VerticalPanel panel = new VerticalPanel(); // Description Label HTML descriptionLabel = new HTML( "<p style=\"font-size:20px\">Please create a description for this voting session.<br>Note: Max. 500 characters.<br>Obs: For new lines please use HTML '<br>'.</p>"); // TextArea final TextArea textArea = new TextArea(); textArea.setSize("500px", "200px"); textArea.getElement().setAttribute("maxlength", "500"); // Vote ID Label HTML voteIdLabel = new HTML( "<p style=\"font-size:20px\">Please choose a vote ID.<br>Note: Numbers only.<br>Obs: Error will occur if vote ID already exists.</p>"); // Horizontal Panel HorizontalPanel hPanel = new HorizontalPanel(); // Vote ID TextBox final TextBox voteIDBox = new TextBox(); voteIDBox.setMaxLength(11); // Label Label voteId = new Label(); voteId.setText("Vote ID: "); // Check Button Button checkButton = new Button(); checkButton.setText("Check"); checkButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String voteId = voteIDBox.getText(); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBCheckIfVoteIDAvailableAsync rpcService = (DBCheckIfVoteIDAvailableAsync) GWT.create(DBCheckIfVoteIDAvailable.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBCheckIfVoteIDAvailableImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.checkVoteId(voteId, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_VOTE_ID_EXISTS_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_VOTE_ID_NOT_EXISTS_TITLE, AdminMenuConstants.DIALOG_BOX_VOTE_ID_NOT_EXISTS_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } }); } }); // Deactivate Vote Button Button deactivateVote = new Button(); deactivateVote.setText("Deactivate Vote"); deactivateVote.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final DialogBox dialogBox = new DialogBox(); dialogBox.setTitle("Vote Deactivation"); VerticalPanel panel = new VerticalPanel(); panel.setSpacing(6); dialogBox.setWidget(panel); HTML details = new HTML(); details.setHTML("<p>Please press the deactivate Button in order to deactivate the vote.</p>"); panel.add(details); panel.setCellHorizontalAlignment(details, HasHorizontalAlignment.ALIGN_CENTER); activeVoteID.setEnabled(false); activeVoteID.setSize("75px", "20px"); panel.add(activeVoteID); panel.setCellHorizontalAlignment(activeVoteID, HasHorizontalAlignment.ALIGN_CENTER); HorizontalPanel hPanel = new HorizontalPanel(); Button deactivateButton = new Button(); deactivateButton.setText("Deactivate"); deactivateButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final String voteId = activeVoteID.getText(); if (voteId != null && !voteId.trim().equals("")) { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBDeactivateVoteAsync rpcService = (DBDeactivateVoteAsync) GWT.create(DBDeactivateVote.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBDeactivateVoteImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.deactivateVote(voteId, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( AdminMenuConstants.DIALOG_BOX_FAILED_DEACTIVATE_VOTE_ID_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox( AdminMenuConstants.DIALOG_BOX_SUCCESS_DEACTIVATE_VOTE_ID_TITLE, AdminMenuConstants.DIALOG_BOX_SUCCESS_DEACTIVATE_VOTE_ID_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); activeVoteID.setText(null); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_VOTE_ID_NOT_EXISTS_TITLE, AdminMenuConstants.DIALOG_BOX_VOTE_ID_NOT_ACTIVE_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } dialogBox.hide(); } }); Button cancelButton = new Button(); cancelButton.setText("Cancel"); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { dialogBox.hide(); } }); hPanel.add(deactivateButton); hPanel.add(cancelButton); hPanel.getWidget(0).getElement().getStyle().setMarginRight(20.0, Unit.PX); hPanel.getWidget(0).getElement().getStyle().setMarginTop(20.0, Unit.PX); hPanel.getWidget(1).getElement().getStyle().setMarginTop(20.0, Unit.PX); panel.add(hPanel); panel.setCellHorizontalAlignment(hPanel, HasHorizontalAlignment.ALIGN_CENTER); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } }); hPanel.add(voteId); hPanel.add(voteIDBox); hPanel.add(checkButton); hPanel.add(deactivateVote); hPanel.getWidget(0).getElement().getStyle().setMarginRight(20.0, Unit.PX); hPanel.getWidget(0).getElement().getStyle().setMarginTop(5.0, Unit.PX); hPanel.getWidget(1).getElement().getStyle().setMarginRight(20.0, Unit.PX); hPanel.getWidget(2).getElement().getStyle().setMarginRight(20.0, Unit.PX); // Create a FlexTable final FlexTable flexTable = new FlexTable(); FlexCellFormatter cellFormatter = flexTable.getFlexCellFormatter(); flexTable.addStyleName("cw-FlexTable"); flexTable.setWidth("32em"); flexTable.setCellSpacing(5); flexTable.setCellPadding(3); // Add some text cellFormatter.setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_LEFT); flexTable.setHTML(0, 0, "Vote Options"); cellFormatter.setColSpan(0, 0, 2); // Add a button that will add more rows to the table Button addRowsButton = new Button(); addRowsButton.setText("Add Option"); addRowsButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { addRow(flexTable); } }); addRowsButton.addStyleName("sc-FixedWidthButton"); // Add a button that will remove rows from the table Button removeRowButton = new Button(); removeRowButton.setText("Remove Option"); removeRowButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { removeRow(flexTable); } }); removeRowButton.addStyleName("sc-FixedWidthButton"); VerticalPanel buttonPanel = new VerticalPanel(); buttonPanel.setStyleName("cw-FlexTable-buttonPanel"); buttonPanel.add(addRowsButton); buttonPanel.add(removeRowButton); flexTable.setWidget(0, 1, buttonPanel); cellFormatter.setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP); HTML tableDescription = new HTML( "<p style=\"font-size:20px\">Please add voting options.<br>Note: At least 2 options have to be added in order to create a voting session.</p>"); HorizontalPanel buttons = new HorizontalPanel(); Button submitButton = new Button(); submitButton.setText("Submit"); submitButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final String text = textArea.getText(); final String voteID = voteIDBox.getText(); final List<String> options = new ArrayList<String>(); int rowCount = flexTable.getRowCount(); for (int i = 1; i < rowCount; i++) { Widget widget = flexTable.getWidget(i, 1); TextBox textBox = (TextBox) widget; String option = textBox.getText(); if (option != null && !options.contains(option.trim())) { options.add(option); } } boolean hasText = true; boolean hasVoteId = true; boolean hasOptions = true; boolean isNumber = true; String message = ""; if (text == null || text.trim().equals("")) { message += "<p>Please enter a description for this voting session!</p>"; hasOptions = false; } if (voteID == null || voteID.trim().equals("")) { message += "<p>Please enter a vote ID for this voting session!</p>"; hasVoteId = false; } if (!isNumeric(voteID)) { message += "<p>Vote ID has to be a number!</p>"; isNumber = false; } if (options.size() < 2) { message += "<p>Voting session must contain at least 2 voting options!</p>"; hasOptions = false; } if (hasText && hasVoteId && isNumber && hasOptions) { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBCheckIfVoteIDAvailableAsync rpcService = (DBCheckIfVoteIDAvailableAsync) GWT.create(DBCheckIfVoteIDAvailable.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBCheckIfVoteIDAvailableImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.checkVoteId(voteID, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_VOTE_ID_EXISTS_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(Boolean result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DBCheckIfActiveVotingSessionAsync rpcService = (DBCheckIfActiveVotingSessionAsync) GWT .create(DBCheckIfActiveVotingSession.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBCheckIfActiveVotingSessionImpl"; target.setServiceEntryPoint(moduleRelativeURL); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); // rpcService.ckeckForActiveVotingSession(new AsyncCallback<Boolean>() { // // @Override // public void onFailure(Throwable caught) { // DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); // DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILED_ACTIVE_VOTE_EXISTS, // caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); // dialogBox.setGlassEnabled(true); // dialogBox.setAnimationEnabled(true); // dialogBox.center(); // dialogBox.show(); // // } // // @Override // public void onSuccess(Boolean result) { // DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); // Vote vote = new Vote(options, voteID, "true"); // DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); // DBInsertVoteAsync rpcService = (DBInsertVoteAsync) GWT.create(DBInsertVote.class); // ServiceDefTarget target = (ServiceDefTarget) rpcService; // String moduleRelativeURL = GWT.getModuleBaseURL() + "DBInsertVoteImpl"; // target.setServiceEntryPoint(moduleRelativeURL); // // rpcService.insertVote(vote, text, new AsyncCallback<Boolean>() { // // @Override // public void onFailure(Throwable caught) { // DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); // DialogBox dialogBox = DialogBoxCreator.createDialogBox( // AdminMenuConstants.DIALOG_BOX_FAILED_INSERT_VOTE_TITLE, caught.getMessage(), // DialogBoxConstants.CLOSE_BUTTON, false, false); // dialogBox.setGlassEnabled(true); // dialogBox.setAnimationEnabled(true); // dialogBox.center(); // dialogBox.show(); // // } // // @Override // public void onSuccess(Boolean result) { // DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); // DialogBox dialogBox = DialogBoxCreator.createDialogBox( // AdminMenuConstants.DIALOG_BOX_SUCCESS_INSERT_VOTE_TITLE, // AdminMenuConstants.DIALOG_BOX_SUCCESS_INSERT_VOTE_MESSAGE, DialogBoxConstants.CLOSE_BUTTON, false, // false); // dialogBox.setGlassEnabled(true); // dialogBox.setAnimationEnabled(true); // dialogBox.center(); // dialogBox.show(); // // textArea.setText(null); // voteIDBox.setText(null); // removeAllRows(flexTable); // // } // }); // } // }); } }); } else { DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILED_VOTE_INFO_TITLE, message, DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } } }); Button resetButton = new Button(); resetButton.setText("Reset"); resetButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { textArea.setText(null); voteIDBox.setText(null); removeAllRows(flexTable); } }); buttons.add(submitButton); buttons.add(resetButton); buttons.getElement().getStyle().setMarginTop(30.0, Unit.PX); buttons.getWidget(0).getElement().getStyle().setMarginRight(20.0, Unit.PX); panel.add(descriptionLabel); panel.add(textArea); panel.add(voteIdLabel); panel.add(hPanel); panel.add(tableDescription); panel.add(flexTable); panel.add(buttons); panel.getWidget(4).getElement().getStyle().setMarginTop(20.0, Unit.PX); return panel; } private void getActiveVoteID() { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBGetActiveVoteIDAsync rpcService = (DBGetActiveVoteIDAsync) GWT.create(DBGetActiveVoteID.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetActiveVoteIDImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.getActiveVoteID(new AsyncCallback<String>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); // DO NOTHING } @Override public void onSuccess(String result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); activeVoteID.setText(result); } }); } public static boolean isNumeric(String str) { for (char c : str.toCharArray()) { if (!Character.isDigit(c)) return false; } return true; } protected void removeAllRows(FlexTable flexTable) { int numRows = flexTable.getRowCount(); if (numRows > 1) { for (int i = 1; i < numRows; i++) { flexTable.removeRow(i); flexTable.getFlexCellFormatter().setRowSpan(0, 1, i); i--; } } } protected void removeRow(FlexTable flexTable) { int numRows = flexTable.getRowCount(); if (numRows > 1) { flexTable.removeRow(numRows - 1); flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows - 1); } } protected void addRow(FlexTable flexTable) { int numRows = flexTable.getRowCount(); flexTable.setWidget(numRows, 0, new Label("Option " + (numRows))); flexTable.setWidget(numRows, 1, new TextBox()); flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1); } protected Widget createReadingsWidget() { final VerticalPanel panel = new VerticalPanel(); final HTML dateDescription = new HTML( "<p style=\"font-size:20px\"><b>Please choose the date (Month and Year) you want to view Readings for.</b></p>"); // Panel to hold month and Year lists final HorizontalPanel hPanel = new HorizontalPanel(); HTML monthDescription = new HTML("Month: "); final ListBox monthListBox = new ListBox(); for (int i = 0; i < months.length; i++) { monthListBox.addItem(months[i]); } monthListBox.setSize("75px", "20px"); HTML yearDescription = new HTML("Year: "); final ListBox yearListBox = new ListBox(); for (int i = 2016; i <= java.lang.Integer.parseInt(currentYear); i++) { yearListBox.addItem(String.valueOf(i)); } yearListBox.setSize("75px", "20px"); hPanel.add(monthDescription); hPanel.add(monthListBox); hPanel.add(yearDescription); hPanel.add(yearListBox); hPanel.getWidget(0).getElement().getStyle().setMarginRight(10.0, Unit.PX); hPanel.getWidget(1).getElement().getStyle().setMarginRight(40.0, Unit.PX); hPanel.getWidget(2).getElement().getStyle().setMarginRight(10.0, Unit.PX); final Button viewReadingsButton = new Button(); viewReadingsButton.setText("View"); viewReadingsButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { panel.clear(); panel.add(dateDescription); panel.add(hPanel); panel.add(viewReadingsButton); String date = monthListBox.getSelectedItemText() + "-" + yearListBox.getSelectedItemText(); Widget readingsInfo = populateReadingsTable(date); panel.add(readingsInfo); } }); panel.add(dateDescription); panel.add(hPanel); panel.add(viewReadingsButton); panel.getWidget(2).getElement().getStyle().setMarginTop(20.0, Unit.PX); panel.getWidget(2).getElement().getStyle().setMarginBottom(20.0, Unit.PX); return panel; } protected Widget populateReadingsTable(String date) { final CellTable<SelfReading> table = new CellTable<SelfReading>(); table.setWidth("100%"); table.setAutoFooterRefreshDisabled(true); table.setAutoHeaderRefreshDisabled(true); final ListDataProvider<SelfReading> dataProvider = new ListDataProvider<SelfReading>(); ListHandler<SelfReading> listHandler = new ListHandler<SelfReading>(dataProvider.getList()); SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); SimplePager pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); pager.setDisplay(table); pager.setPageSize(20); // Create the apartment number column TextColumn<SelfReading> aptNumberColumn = new TextColumn<SelfReading>() { @Override public String getValue(SelfReading object) { return object.getAptNumber(); } }; table.setColumnWidth(aptNumberColumn, 10, Unit.PCT); // Create the Cold Water column TextColumn<SelfReading> coldWaterColumn = new TextColumn<SelfReading>() { @Override public String getValue(SelfReading object) { return object.getColdWater(); } }; table.setColumnWidth(coldWaterColumn, 10, Unit.PCT); // Create the Hot Water column TextColumn<SelfReading> hotWaterColumn = new TextColumn<SelfReading>() { @Override public String getValue(SelfReading object) { return object.getHotWater(); } }; table.setColumnWidth(hotWaterColumn, 10, Unit.PCT); // Create the Electricity column TextColumn<SelfReading> electricityColumn = new TextColumn<SelfReading>() { @Override public String getValue(SelfReading object) { return object.getElectricity(); } }; table.setColumnWidth(electricityColumn, 10, Unit.PCT); // Create the Gaz column TextColumn<SelfReading> gazColumn = new TextColumn<SelfReading>() { @Override public String getValue(SelfReading object) { return object.getGaz(); } }; table.setColumnWidth(gazColumn, 10, Unit.PCT); table.addColumnSortHandler(listHandler); // Add the columns table.addColumn(aptNumberColumn, AdminMenuConstants.APARTMENT_NUMBER_COLUMN); table.addColumn(coldWaterColumn, AdminMenuConstants.COLD_WATER_COLUMN); table.addColumn(hotWaterColumn, AdminMenuConstants.HOT_WATER_COLUMN); table.addColumn(electricityColumn, AdminMenuConstants.ELECTRICITY_COLUMN); table.addColumn(gazColumn, AdminMenuConstants.GAZ_COLUMN); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBGetSelfReadingsAsync rpcService = (DBGetSelfReadingsAsync) GWT.create(DBGetSelfReadings.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetSelfReadingsImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.getSelfReadings(date, new AsyncCallback<List<SelfReading>>() { @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILED_RETRIEVING_SELF_READINGS, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } @Override public void onSuccess(List<SelfReading> result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); table.setRowCount(result.size()); dataProvider.addDataDisplay(table); List<SelfReading> list = dataProvider.getList(); for (SelfReading selfReading : result) { list.add(selfReading); } } }); VerticalPanel vPanel = new VerticalPanel(); vPanel.add(table); vPanel.add(pager); table.addStyleName("cellTable"); pager.addStyleName("pager"); return vPanel; } protected Widget createUploadFormWidget() { VerticalPanel vPanel = new VerticalPanel(); String UPLOAD_ACTION_URL = GWT.getModuleBaseURL() + "upload"; // Create a FormPanel and point it at a service final FormPanel form = new FormPanel(); form.setAction(UPLOAD_ACTION_URL); // Because we're going to add a FileUpload widget, we'll need to set the form to use the POST method, and multipart MIME encoding form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); // Create a panel to hold all of the form widgets VerticalPanel panel = new VerticalPanel(); form.setWidget(panel); // Create a FileUpload widget FileUpload upload = new FileUpload(); upload.setName("uploadFormElement"); panel.add(upload); // Add a submit Button Button submitButton = new Button(); submitButton.setText("Submit"); submitButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); form.submit(); } }); form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { @Override public void onSubmitComplete(SubmitCompleteEvent event) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); Window.alert(event.getResults()); } }); panel.add(submitButton); HTML description = new HTML("<p>Please use the form below to upload the Excel File containing the upkeep costs for the current month.</p>"); vPanel.add(description); vPanel.add(form); return vPanel; } protected Widget createComplaintsViewerWidget() { // Create a CelLTable final CellTable<ComplaintInfo> table = new CellTable<ComplaintInfo>(); table.setWidth("100%", true); table.setAutoFooterRefreshDisabled(true); table.setAutoHeaderRefreshDisabled(true); final ListDataProvider<ComplaintInfo> dataProvider = new ListDataProvider<ComplaintInfo>(); ListHandler<ComplaintInfo> listHandler = new ListHandler<ComplaintInfo>(dataProvider.getList()); // Create a pager to control the table SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); SimplePager pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); pager.setDisplay(table); pager.setPageSize(25); // Create the complaintId column final TextColumn<ComplaintInfo> complaintIdColumn = new TextColumn<ComplaintInfo>() { @Override public String getValue(ComplaintInfo object) { return object.getComplaintId(); } }; table.setColumnWidth(complaintIdColumn, 10, Unit.PCT); complaintIdColumn.setSortable(true); listHandler.setComparator(complaintIdColumn, new Comparator<ComplaintInfo>() { @Override public int compare(ComplaintInfo o1, ComplaintInfo o2) { Integer comp1 = Integer.parseInt(o1.getComplaintId()); Integer comp2 = Integer.parseInt(o2.getComplaintId()); return comp1.compareTo(comp2); } }); // Create the name column TextColumn<ComplaintInfo> nameColumn = new TextColumn<ComplaintInfo>() { @Override public String getValue(ComplaintInfo object) { return object.getName(); } }; table.setColumnWidth(nameColumn, 20, Unit.PCT); nameColumn.setSortable(true); listHandler.setComparator(nameColumn, new Comparator<ComplaintInfo>() { @Override public int compare(ComplaintInfo o1, ComplaintInfo o2) { return o1.getName().compareTo(o2.getName()); } }); // Create the phone number column TextColumn<ComplaintInfo> phoneNumberColumn = new TextColumn<ComplaintInfo>() { @Override public String getValue(ComplaintInfo object) { return object.getPhoneNumber(); } }; table.setColumnWidth(phoneNumberColumn, 10, Unit.PCT); // Create the date column TextColumn<ComplaintInfo> dateColumn = new TextColumn<ComplaintInfo>() { @Override public String getValue(ComplaintInfo object) { return object.getDate(); } }; table.setColumnWidth(dateColumn, 10, Unit.PCT); dateColumn.setSortable(true); listHandler.setComparator(dateColumn, new Comparator<ComplaintInfo>() { @Override public int compare(ComplaintInfo o1, ComplaintInfo o2) { return o1.getDate().compareTo(o2.getDate()); } }); // Create the complaintTo column TextColumn<ComplaintInfo> complaintToColumn = new TextColumn<ComplaintInfo>() { @Override public String getValue(ComplaintInfo object) { return object.getComplaintTo(); } }; table.setColumnWidth(complaintToColumn, 20, Unit.PCT); table.addColumnSortHandler(listHandler); // Add the columns table.addColumn(complaintIdColumn, AdminMenuConstants.COMPLAINT_ID_COLUMN); table.addColumn(nameColumn, AdminMenuConstants.COMPLAINT_NAME_COLUMN); table.addColumn(phoneNumberColumn, AdminMenuConstants.COMPLAINT_PHONE_NUMBER_COLUMN); table.addColumn(dateColumn, AdminMenuConstants.COMPLAINT_DATE_COLUMN); table.addColumn(complaintToColumn, AdminMenuConstants.COMPLAINT_TO_COLUMN); DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK); DBGetComplaintInfoAsync rpcService = (DBGetComplaintInfoAsync) GWT.create(DBGetComplaintInfo.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetComplaintInfoImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.getComplaintInfo(new AsyncCallback<List<ComplaintInfo>>() { @Override public void onSuccess(List<ComplaintInfo> result) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); table.setRowCount(result.size()); dataProvider.addDataDisplay(table); List<ComplaintInfo> list = dataProvider.getList(); for (ComplaintInfo info : result) { list.add(info); } } @Override public void onFailure(Throwable caught) { DOM.getElementById("loading").getStyle().setDisplay(Display.NONE); DialogBox dialogBox = DialogBoxCreator.createDialogBox(AdminMenuConstants.DIALOG_BOX_FAILED_RETRIEVING_COMPLAINTS_TITLE, caught.getMessage(), DialogBoxConstants.CLOSE_BUTTON, false, false); dialogBox.setGlassEnabled(true); dialogBox.setAnimationEnabled(true); dialogBox.center(); dialogBox.show(); } }); VerticalPanel panel = new VerticalPanel(); panel.add(table); panel.add(pager); table.addStyleName("cellTable"); pager.addStyleName("pager"); return panel; } @Override public void setName(String username) { } @Override public void setPresenter(Presenter presenter) { } private String setCurrentYear() { DateGetterAsync rpcService = (DateGetterAsync) GWT.create(DateGetter.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DateGetterImpl"; target.setServiceEntryPoint(moduleRelativeURL); String month = ""; rpcService.getCurrentYear(new AsyncCallback<String>() { @Override public void onFailure(Throwable caught) { // Don't do anything } @Override public void onSuccess(String result) { currentYear = result; } }); return month; } public void setUserInfo(String username) { DBGetUserInfoAsync rpcService = (DBGetUserInfoAsync) GWT.create(DBGetUserInfo.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetUserInfoImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.getUserInfo(username, new AsyncCallback<UserInfo>() { @Override public void onSuccess(UserInfo result) { AdminViewImpl.userInfo = result; } @Override public void onFailure(Throwable caught) { // Window.alert(caught.getMessage()); } }); } }